package cn.skyclass.utils
{
	/**
	 * 树遍历器，从指定节点开始遍历所有的子节点
	 */
	public class TreeTraverser
	{
		/**
		 * baseNode : 遍历的起点
		 * callback : 回调函数，接口形式 function funcName(node:Object):Boolean;
		 * 				返回值标识是否继续进行遍历，继续为 true，停止为 false。
		 */
		public function TreeTraverser(baseNode:Object, callback:Function){
			this.baseNode = baseNode;
			this.callback = callback;
		}
		
		private var baseNode:Object;
		private var callback:Function;
		
		public var chilrenPropertyName:String = "children";
		
		
		public function start():void{
			this.beginCall(this.baseNode);
		}
		
		private function beginCall(node:Object):void{
			// 如果不需要继续调用，则返回
			if(!this.callback(node)){
				return;
			}
			
			// 如果节点不为空，则循环其子节点
			if(node && node[chilrenPropertyName]){
				for each(var c:Object in node[chilrenPropertyName]){
					this.beginCall(c);
				}
			}
		}
	}
}